XMLHttpRequest
অবজেক্ট হলো Ajax এর একটি মূল উপাদান এবং এটি JavaScript API এর একটি অংশ, যা ব্রাউজার এবং ওয়েব সার্ভারের মধ্যে ডেটা এক্সচেঞ্জ করতে ব্যবহৃত হয়। এটি Ajax রিকোয়েস্ট তৈরি ও পরিচালনার জন্য ব্যবহৃত হয়, যা ওয়েব পেজকে পেজ রিলোড ছাড়াই ডায়নামিকভাবে আপডেট করতে সক্ষম করে। নিচে XMLHttpRequest
অবজেক্টের ভূমিকা এবং কাজের প্রক্রিয়া নিয়ে বিস্তারিত আলোচনা করা হলো:
১. অ্যাসিনক্রোনাস ডেটা এক্সচেঞ্জ:
XMLHttpRequest
অবজেক্ট অ্যাসিনক্রোনাস পদ্ধতিতে (Asynchronous) সার্ভারের সাথে ডেটা আদান-প্রদান করতে সক্ষম। এর ফলে, ওয়েব পেজ রিফ্রেশ না করেই পেজে নতুন ডেটা আপডেট করা যায়।২. HTTP রিকোয়েস্ট পরিচালনা:
XMLHttpRequest
অবজেক্ট বিভিন্ন HTTP মেথড (যেমন: GET, POST, PUT, DELETE) ব্যবহার করে সার্ভারের সাথে রিকোয়েস্ট পাঠাতে পারে।GET
মেথড সাধারণত ডেটা আনার জন্য ব্যবহৃত হয়, এবং POST
মেথড ডেটা সার্ভারে পাঠানোর জন্য ব্যবহৃত হয়।৩. সার্ভার রেসপন্স প্রসেস করা:
XMLHttpRequest
অবজেক্ট সার্ভার থেকে আসা রেসপন্স রিসিভ করতে এবং প্রসেস করতে ব্যবহৃত হয়। এটি JSON, XML, HTML বা প্লেইন টেক্সট ফরম্যাটে রেসপন্স হ্যান্ডেল করতে পারে।৪. সিঙ্ক্রোনাস এবং অ্যাসিনক্রোনাস অপারেশন:
XMLHttpRequest
অবজেক্ট অ্যাসিনক্রোনাস রিকোয়েস্টের পাশাপাশি সিঙ্ক্রোনাস রিকোয়েস্টও (Synchronous) পরিচালনা করতে পারে। তবে সাধারণত Ajax রিকোয়েস্ট অ্যাসিনক্রোনাস পদ্ধতিতে করা হয়, কারণ এটি পেজের ইউজার এক্সপেরিয়েন্স উন্নত করে।৫. এরর হ্যান্ডলিং:
XMLHttpRequest
অবজেক্টের মাধ্যমে রিকোয়েস্টের সময় কোনো এরর হলে, সেটি চেক করা এবং হ্যান্ডেল করা যায়। এর মাধ্যমে ডেভেলপাররা ইউজারদের সঠিক বার্তা প্রদর্শন করতে পারে বা উপযুক্ত অ্যাকশন নিতে পারে।Ajax রিকোয়েস্ট করার জন্য XMLHttpRequest
অবজেক্টের কাজের ধাপগুলো নিম্নে দেখানো হলো:
১. XMLHttpRequest অবজেক্ট তৈরি করা:
var xhr = new XMLHttpRequest();
XMLHttpRequest
অবজেক্ট তৈরি করে, যা Ajax রিকোয়েস্ট পরিচালনা করবে।২. রিকোয়েস্ট সেটআপ করা:
xhr.open("GET", "https://example.com/api/data", true);
open()
মেথড ব্যবহার করে HTTP মেথড (যেমন: GET/POST) এবং URL সেট করা হয়।true
বা false
দিয়ে অ্যাসিনক্রোনাস বা সিঙ্ক্রোনাস সেট করা হয় (এখানে true
মানে অ্যাসিনক্রোনাস)।৩. রিকোয়েস্ট পাঠানো:
xhr.send();
send()
মেথড ব্যবহার করে রিকোয়েস্টটি সার্ভারে পাঠানো হয়। যদি এটি একটি POST রিকোয়েস্ট হয়, তবে send()
মেথডে ডেটা প্যারামিটার হিসেবে পাঠানো হয়।৪. রেসপন্স হ্যান্ডলিং:
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
// রেসপন্স ডেটা প্রসেস করা
var data = JSON.parse(xhr.responseText);
console.log(data);
}
};
onreadystatechange
ইভেন্ট হ্যান্ডলার ব্যবহার করে রিকোয়েস্টের অবস্থা চেক করা হয়।readyState === 4
নির্দেশ করে যে রিকোয়েস্ট সম্পূর্ণ হয়েছে, এবং status === 200
নির্দেশ করে যে রিকোয়েস্ট সফল হয়েছে।৫. এরর হ্যান্ডলিং (বিকল্প ধাপ):
onerror
ইভেন্ট ব্যবহার করে, যদি রিকোয়েস্টের সময় কোনো সমস্যা হয়, তা হ্যান্ডেল করা যায় এবং উপযুক্ত বার্তা দেখানো যায়।function fetchData() {
var xhr = new XMLHttpRequest(); // XMLHttpRequest অবজেক্ট তৈরি করা
xhr.open("GET", "https://jsonplaceholder.typicode.com/posts/1", true); // রিকোয়েস্ট সেটআপ করা
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
var data = JSON.parse(xhr.responseText); // JSON ডেটা প্রসেস করা
document.getElementById("data-container").innerHTML = `
<h2>${data.title}</h2>
<p>${data.body}</p>
`;
}
};
xhr.send(); // রিকোয়েস্ট পাঠানো
}
fetchData()
ফাংশন একটি Ajax রিকোয়েস্ট পাঠায় এবং সার্ভার থেকে JSON ডেটা এনে তা HTML ডিভে ইনজেক্ট করে।XMLHttpRequest
অবজেক্ট Ajax রিকোয়েস্ট তৈরি, পরিচালনা এবং সার্ভারের রেসপন্স হ্যান্ডেল করতে ব্যবহৃত হয়।XMLHttpRequest
অবজেক্ট Ajax এর একটি গুরুত্বপূর্ণ উপাদান যা ওয়েব পেজকে ডায়নামিক, ইন্টারেক্টিভ এবং রেসপন্সিভ করতে ব্যবহৃত হয়।
XMLHttpRequest
অবজেক্টের দুটি গুরুত্বপূর্ণ মেথড হলো open()
এবং send()
। এই মেথডগুলো Ajax রিকোয়েস্ট তৈরি এবং সার্ভারের সাথে ডেটা এক্সচেঞ্জ করার প্রক্রিয়ায় প্রধান ভূমিকা পালন করে। নিচে open()
এবং send()
মেথডের বিস্তারিত আলোচনা করা হলো:
open()
মেথডopen()
মেথড XMLHttpRequest
অবজেক্টে HTTP রিকোয়েস্ট সেটআপ করার জন্য ব্যবহৃত হয়। এটি রিকোয়েস্টের ধরন (যেমন GET বা POST), URL এবং অ্যাসিনক্রোনাস বা সিঙ্ক্রোনাসভাবে রিকোয়েস্টটি কাজ করবে কিনা, তা নির্ধারণ করে।xhr.open(method, url, async);
১. method
: এটি রিকোয়েস্টের HTTP মেথড নির্দেশ করে। সাধারণ মেথডগুলো হলো:
"GET"
: ডেটা আনার জন্য।"POST"
: ডেটা সার্ভারে পাঠানোর জন্য।২. url
: সার্ভারের URL যেখান থেকে ডেটা ফেচ করা হবে বা যেখানে ডেটা পাঠানো হবে। এটি হতে পারে একটি API বা JSON ফাইলের লিঙ্ক।
৩. async
: এটি একটি বুলিয়ান প্যারামিটার যা নির্ধারণ করে রিকোয়েস্টটি অ্যাসিনক্রোনাস (true) নাকি সিঙ্ক্রোনাস (false) হবে।
true
: অ্যাসিনক্রোনাস রিকোয়েস্ট (প্রায় সব ক্ষেত্রে ব্যবহার করা হয়)।false
: সিঙ্ক্রোনাস রিকোয়েস্ট (প্রায় কখনোই ব্যবহার করা হয় না, কারণ এটি পেজ ফ্রিজ করে দিতে পারে)।var xhr = new XMLHttpRequest();
xhr.open("GET", "https://example.com/api/data", true);
বিস্তারিত:
"GET"
মেথড ব্যবহার করে ডেটা ফেচ করার জন্য রিকোয়েস্ট সেট করা হয়েছে।"https://example.com/api/data"
URL থেকে ডেটা ফেচ করা হবে।true
মানে রিকোয়েস্টটি অ্যাসিনক্রোনাসভাবে চলবে, অর্থাৎ পেজ রিলোড বা ফ্রিজ না করেই রিকোয়েস্ট প্রসেস হবে।send()
মেথডsend()
মেথড XMLHttpRequest
অবজেক্ট ব্যবহার করে সার্ভারে রিকোয়েস্ট পাঠানোর জন্য ব্যবহৃত হয়। এটি open()
মেথড কল করার পর ব্যবহার করা হয় এবং এটি সার্ভারের সাথে রিকোয়েস্ট শুরু করে।xhr.send(body);
body
: এটি ঐচ্ছিক এবং সাধারণত POST রিকোয়েস্টের জন্য ব্যবহৃত হয়। এটি সার্ভারে পাঠানোর ডেটা ধারণ করে।send()
মেথডে কোনো প্যারামিটার লাগবে না।GET রিকোয়েস্টের জন্য:
var xhr = new XMLHttpRequest();
xhr.open("GET", "https://example.com/api/data", true);
xhr.send();
send()
মেথড কোনো প্যারামিটার ছাড়াই কল করা হয়েছে, কারণ এটি একটি GET রিকোয়েস্ট।POST রিকোয়েস্টের জন্য:
var xhr = new XMLHttpRequest();
xhr.open("POST", "https://example.com/api/data", true);
xhr.setRequestHeader("Content-Type", "application/json");
var data = JSON.stringify({ name: "John", age: 30 });
xhr.send(data);
এখানে send(data)
মেথডে JSON ডেটা প্যারামিটার হিসেবে পাঠানো হয়েছে, যা সার্ভারে সাবমিট হবে।
open()
এবং send()
এর সংক্ষিপ্ত ব্যবহারের ধাপ:open()
: প্রথমে, এটি রিকোয়েস্ট টাইপ, URL, এবং অ্যাসিনক্রোনাস বা সিঙ্ক্রোনাস সেট করে।send()
: তারপর, এটি রিকোয়েস্টটি সার্ভারে পাঠায়।function fetchData() {
var xhr = new XMLHttpRequest(); // XMLHttpRequest অবজেক্ট তৈরি করা
xhr.open("GET", "https://jsonplaceholder.typicode.com/posts/1", true); // রিকোয়েস্ট ওপেন করা
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
var data = JSON.parse(xhr.responseText); // JSON ডেটা প্রসেস করা
console.log(data);
}
};
xhr.send(); // রিকোয়েস্ট পাঠানো
}
open()
মেথডের মাধ্যমে রিকোয়েস্ট সেটআপ করা হয়েছে এবং send()
মেথডের মাধ্যমে রিকোয়েস্টটি সার্ভারে পাঠানো হয়েছে।onreadystatechange
ইভেন্ট হ্যান্ডলার ব্যবহার করে তা প্রসেস করা হয়েছে।open()
: রিকোয়েস্ট সেটআপ করার জন্য ব্যবহৃত হয় (HTTP মেথড, URL, এবং অ্যাসিনক্রোনাস বা সিঙ্ক্রোনাস নির্ধারণ)।send()
: রিকোয়েস্টটি সার্ভারে পাঠানোর জন্য ব্যবহৃত হয়।open()
এবং send()
মেথড একসাথে ব্যবহার করে Ajax রিকোয়েস্ট তৈরি এবং পরিচালনা করা হয়, যা ওয়েব পেজকে ডায়নামিকভাবে আপডেট করতে এবং ইউজার ইন্টারফেসে ডেটা প্রসেস করতে সহায়ক।
Ajax এর মাধ্যমে Request
এবং Response
Handling হলো ওয়েব সার্ভার এবং ক্লায়েন্ট (ব্রাউজার) এর মধ্যে ডেটা আদান-প্রদানের একটি প্রক্রিয়া। Ajax রিকোয়েস্টের মাধ্যমে সার্ভারে তথ্য পাঠানো হয় এবং সার্ভার থেকে প্রাপ্ত রেসপন্স ডেটা প্রসেস করা হয়। XMLHttpRequest
অবজেক্ট ব্যবহার করে এই প্রক্রিয়াটি সম্পন্ন করা হয়। নিচে Request
এবং Response
Handling এর বিস্তারিত আলোচনা এবং উদাহরণ তুলে ধরা হলো।
Request
Handling হলো সেই প্রক্রিয়া, যেখানে একটি Ajax রিকোয়েস্ট সার্ভারে পাঠানো হয় এবং এই রিকোয়েস্টটি কীভাবে সেটআপ এবং পরিচালনা করা হয়।
১. XMLHttpRequest
অবজেক্ট তৈরি করা:
XMLHttpRequest
অবজেক্ট তৈরি করা হয়, যা Ajax রিকোয়েস্ট পরিচালনা করবে।var xhr = new XMLHttpRequest();
২. রিকোয়েস্ট ওপেন করা:
open()
মেথড ব্যবহার করে HTTP মেথড (যেমন GET বা POST), সার্ভারের URL এবং অ্যাসিনক্রোনাস বা সিঙ্ক্রোনাস সেট করা হয়।xhr.open("GET", "https://jsonplaceholder.typicode.com/posts/1", true);
৩. রিকোয়েস্ট হেডার সেট করা (ঐচ্ছিক):
setRequestHeader()
মেথড ব্যবহার করে কনটেন্ট টাইপ বা অন্যান্য হেডার সেট করা হয়।xhr.setRequestHeader("Content-Type", "application/json");
৪. রিকোয়েস্ট পাঠানো:
send()
মেথড ব্যবহার করে রিকোয়েস্টটি সার্ভারে পাঠানো হয়।xhr.send();
send()
এ পাঠানো হয়।Response
Handling হলো সেই প্রক্রিয়া, যেখানে সার্ভার থেকে প্রাপ্ত রেসপন্স ডেটা প্রসেস করা হয় এবং UI বা HTML DOM আপডেট করা হয়।
১. onreadystatechange
ইভেন্ট হ্যান্ডলার সেট করা:
onreadystatechange
ইভেন্ট হ্যান্ডলার ট্রিগার হয়।xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
// রেসপন্স প্রসেস করা
}
};
readyState
এবং status
ব্যবহার করে চেক করা হয় যে রিকোয়েস্ট সম্পূর্ণ এবং সফল হয়েছে কিনা।readyState === 4
নির্দেশ করে রিকোয়েস্ট সম্পূর্ণ।status === 200
নির্দেশ করে রিকোয়েস্ট সফল।২. রেসপন্স ডেটা প্রসেস করা:
responseText
বা responseXML
ব্যবহার করে ডেটা রিসিভ করা হয় এবং প্রসেস করা হয়।if (xhr.readyState === 4 && xhr.status === 200) {
var data = JSON.parse(xhr.responseText);
console.log(data);
}
responseText
ব্যবহার করে প্লেইন টেক্সট বা JSON ডেটা রিসিভ করা যায়।responseXML
ব্যবহার করা হয়।৩. HTML DOM আপডেট করা:
document.getElementById("data-container").innerHTML = `
<h2>${data.title}</h2>
<p>${data.body}</p>
`;
এরর হ্যান্ডলিং:
status
২০০ না হয়), তবে একটি এরর মেসেজ বা লজিক্যাল এক্সেপশন হ্যান্ডল করা হয়।if (xhr.readyState === 4 && xhr.status !== 200) {
console.error("Request failed with status: " + xhr.status);
}
function fetchData() {
// XMLHttpRequest অবজেক্ট তৈরি করা
var xhr = new XMLHttpRequest();
// রিকোয়েস্ট ওপেন করা (GET মেথড, URL এবং অ্যাসিনক)
xhr.open("GET", "https://jsonplaceholder.typicode.com/posts/1", true);
// রেসপন্স হ্যান্ডলিং সেট করা
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) { // রিকোয়েস্ট সম্পূর্ণ
if (xhr.status === 200) { // রিকোয়েস্ট সফল
var data = JSON.parse(xhr.responseText); // JSON ডেটা প্রসেস করা
document.getElementById("data-container").innerHTML = `
<h2>${data.title}</h2>
<p>${data.body}</p>
`;
} else {
// এরর হ্যান্ডলিং
document.getElementById("data-container").innerHTML = "Error loading data!";
}
}
};
// রিকোয়েস্ট পাঠানো
xhr.send();
}
fetchData()
ফাংশন কল করলে একটি GET রিকোয়েস্ট তৈরি হয় এবং https://jsonplaceholder.typicode.com/posts/1
থেকে ডেটা ফেচ করা হয়।এই ধাপগুলোর মাধ্যমে Ajax এর Request এবং Response Handling সম্পন্ন করা হয়, যা ওয়েব পেজকে ডায়নামিক এবং ইন্টারেক্টিভ করে তোলে।
readyState
এবং status
হলো XMLHttpRequest
অবজেক্টের দুটি গুরুত্বপূর্ণ প্রপার্টি, যা Ajax রিকোয়েস্টের অবস্থান এবং সার্ভারের রেসপন্স চেক করতে ব্যবহৃত হয়। এগুলোর মাধ্যমে আমরা জানতে পারি যে রিকোয়েস্টটি সম্পূর্ণ হয়েছে কিনা এবং সফল হয়েছে কিনা। এই প্রপার্টিগুলোর মাধ্যমে রেসপন্স ম্যানেজমেন্ট করা হয়। নিচে readyState
এবং status
এর বিস্তারিত ব্যাখ্যা এবং কিভাবে এগুলো ব্যবহার করে রেসপন্স ম্যানেজ করা হয়, তা নিয়ে আলোচনা করা হলো।
readyState
:readyState
প্রপার্টি রিকোয়েস্টের বর্তমান অবস্থান নির্দেশ করে। এটি XMLHttpRequest
এর একটি বিল্ট-ইন প্রপার্টি, যার ভ্যালু ০ থেকে ৪ পর্যন্ত হতে পারে। প্রতিটি ভ্যালু একটি নির্দিষ্ট অবস্থার নির্দেশ করে।
readyState
এর ভ্যালুগুলো:ভ্যালু | অবস্থা | বর্ণনা |
---|---|---|
0 | UNSENT | রিকোয়েস্টটি তৈরি হয়েছে কিন্তু এখনও ওপেন করা হয়নি। |
1 | OPENED | open() মেথড কল করা হয়েছে, কিন্তু send() এখনও কল করা হয়নি। |
2 | HEADERS_RECEIVED | রিকোয়েস্ট পাঠানো হয়েছে, এবং সার্ভার থেকে হেডার রিসিভ করা হয়েছে। |
3 | LOADING | রিকোয়েস্ট প্রসেসিং চলছে এবং সার্ভার থেকে কিছু রেসপন্স আসছে। |
4 | DONE | রিকোয়েস্ট সম্পূর্ণ হয়েছে এবং সার্ভার থেকে পুরো রেসপন্স পাওয়া গেছে। |
readyState === 4
চেক করি, যা নির্দেশ করে রিকোয়েস্ট সম্পূর্ণ হয়েছে।status
:status
প্রপার্টি HTTP স্ট্যাটাস কোড নির্দেশ করে, যা সার্ভার থেকে রেসপন্স হিসেবে আসে। এটি XMLHttpRequest
এর একটি প্রপার্টি, যা রিকোয়েস্টের সফলতা বা ব্যর্থতা যাচাই করতে ব্যবহৃত হয়।
স্ট্যাটাস কোড | অর্থ | বর্ণনা |
---|---|---|
200 | OK | রিকোয়েস্ট সফল হয়েছে এবং সার্ভার থেকে সঠিক রেসপন্স এসেছে। |
404 | Not Found | রিকোয়েস্ট করা রিসোর্সটি সার্ভারে পাওয়া যায়নি। |
500 | Internal Server Error | সার্ভারে কোনো সমস্যা হয়েছে। |
status === 200
চেক করি, যা নির্দেশ করে রিকোয়েস্ট সফল হয়েছে।readyState
এবং status
এর মাধ্যমে Response ManagementreadyState
এবং status
একসাথে ব্যবহার করে আমরা রিকোয়েস্টের সফলতা বা ব্যর্থতা চেক করতে পারি এবং তার উপর ভিত্তি করে উপযুক্ত এক্সেকিউশন করতে পারি।
function fetchData() {
var xhr = new XMLHttpRequest(); // XMLHttpRequest অবজেক্ট তৈরি করা
xhr.open("GET", "https://jsonplaceholder.typicode.com/posts/1", true); // রিকোয়েস্ট ওপেন করা
// রেসপন্স ম্যানেজমেন্টের জন্য onreadystatechange ইভেন্ট হ্যান্ডলার সেট করা
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) { // রিকোয়েস্ট সম্পূর্ণ হয়েছে কিনা তা চেক করা
if (xhr.status === 200) { // রিকোয়েস্ট সফল হয়েছে কিনা তা চেক করা
var data = JSON.parse(xhr.responseText); // JSON ডেটা প্রসেস করা
document.getElementById("data-container").innerHTML = `
<h2>${data.title}</h2>
<p>${data.body}</p>
`;
} else {
// যদি রিকোয়েস্ট ব্যর্থ হয়, তাহলে এরর মেসেজ দেখানো
document.getElementById("data-container").innerHTML = "Error fetching data. Status code: " + xhr.status;
}
}
};
xhr.send(); // রিকোয়েস্ট পাঠানো
}
readyState
চেক করা:xhr.onreadystatechange
ইভেন্ট হ্যান্ডলার ব্যবহার করে চেক করা হয়েছে যে xhr.readyState === 4
কিনা। এটি নির্দেশ করে যে রিকোয়েস্ট সম্পূর্ণ হয়েছে এবং সার্ভার থেকে পুরো রেসপন্স পাওয়া গেছে।status
চেক করা:xhr.readyState === 4
হয়, তাহলে xhr.status === 200
চেক করা হয়েছে, যা নির্দেশ করে যে রিকোয়েস্ট সফল এবং সার্ভার থেকে সঠিক রেসপন্স এসেছে।status === 200
না হয়, তাহলে একটি এরর মেসেজ দেখানো হয়েছে এবং স্ট্যাটাস কোড প্রদর্শন করা হয়েছে।readyState
এবং status
এর মাধ্যমে Response Handling এর ধাপ:readyState === 4
চেক করা:status === 200
চেক করা:status !== 200
হয়, তাহলে একটি এরর মেসেজ প্রদর্শন করা হয় যা ইউজারকে জানায় যে রিকোয়েস্ট ব্যর্থ হয়েছে।readyState
: রিকোয়েস্টের অবস্থা নির্দেশ করে (0 থেকে 4 পর্যন্ত)। আমরা সাধারণত readyState === 4
চেক করি।status
: সার্ভারের রেসপন্সের সফলতা নির্দেশ করে (HTTP স্ট্যাটাস কোড, যেমন 200)। আমরা সাধারণত status === 200
চেক করি।readyState
এবং status
একসাথে ব্যবহার করে Ajax রিকোয়েস্টের রেসপন্স ম্যানেজ করা হয়, যা ওয়েব অ্যাপ্লিকেশনকে ডায়নামিক এবং ইন্টারেক্টিভ করতে সাহায্য করে।